View Javadoc

1   package uba.db.client.ui;
2   
3   import javax.swing.JButton;
4   import javax.swing.JFrame;
5   import javax.swing.JOptionPane;
6   import javax.swing.JPanel;
7   import javax.swing.JScrollPane;
8   import javax.swing.JTabbedPane;
9   import javax.swing.JTextPane;
10  
11  import uba.db.client.model.ClientManager;
12  
13  /***
14   * Ventana cliente.
15   * 
16   * @version $Revision$
17   */
18  public class ClientWindow extends JFrame {
19  
20  	private javax.swing.JPanel jContentPane = null;
21  
22  	private JTabbedPane jTabbedPane = null;
23  
24  	private JScrollPane jScrollPane = null;
25  
26  	private JTextPane jTextPane = null;
27  
28  	private JScrollPane jScrollPane2 = null;
29  
30  	private JPanel jPanel = null;
31  
32  	private JButton jButton1 = null;
33  
34  	private JButton jButton = null;
35  
36  	private String currentResult;
37  
38  	/***
39  	 * El manager que maneja el modelo que representa la ventana
40  	 */
41  	private ClientManager manager;
42  
43  	/***
44  	 * Colabora con la ventana para tomar decisiones, hacer procesamiento, etc
45  	 */
46  	private ClientWindowController controller;
47  
48  	private JTextPane jTextPane1 = null;
49  
50  	private JScrollPane jScrollPane1 = null;
51  
52  	private JTextPane jTextPane2 = null;
53  
54  	private String currentQueryPlan;
55  
56  	/***
57  	 * This is the default constructor
58  	 */
59  	public ClientWindow(ClientManager m) {
60  		super();
61  		initialize(m);
62  	}
63  
64  	/***
65  	 * This method initializes this
66  	 * 
67  	 * @return void
68  	 */
69  	private void initialize(ClientManager m) {
70  		this.setTitle("DataBase Client");
71  		this.setSize(300, 200);
72  		this.setContentPane(getJContentPane());
73  		this.setVisible(true);
74  		manager = m;
75  		controller = new ClientWindowController(this);
76  	}
77  
78  	/***
79  	 * This method initializes jContentPane
80  	 * 
81  	 * @return javax.swing.JPanel
82  	 */
83  	private javax.swing.JPanel getJContentPane() {
84  		if (jContentPane == null) {
85  			jContentPane = new javax.swing.JPanel();
86  			jContentPane.setLayout(new java.awt.BorderLayout());
87  			jContentPane.add(getJTabbedPane(), java.awt.BorderLayout.CENTER);
88  			jContentPane.add(getJPanel(), java.awt.BorderLayout.NORTH);
89  			jContentPane.setVisible(true);
90  		}
91  		return jContentPane;
92  	}
93  
94  	/***
95  	 * This method initializes jTabbedPane
96  	 * 
97  	 * @return javax.swing.JTabbedPane
98  	 */
99  	private JTabbedPane getJTabbedPane() {
100 		if (jTabbedPane == null) {
101 			jTabbedPane = new JTabbedPane();
102 			jTabbedPane.addTab("Query", null, getJScrollPane(), null);
103 			jTabbedPane.addTab("Result", null, getJScrollPane2(), null);
104 			jTabbedPane.addTab("Query Plan", null, getJScrollPane1(), null);
105 		}
106 		return jTabbedPane;
107 	}
108 
109 	/***
110 	 * This method initializes jScrollPane
111 	 * 
112 	 * @return javax.swing.JScrollPane
113 	 */
114 	private JScrollPane getJScrollPane() {
115 		if (jScrollPane == null) {
116 			jScrollPane = new JScrollPane();
117 			jScrollPane.setViewportView(getJTextPane());
118 		}
119 		return jScrollPane;
120 	}
121 
122 	/***
123 	 * This method initializes jTextPane
124 	 * 
125 	 * @return javax.swing.JTextPane
126 	 */
127 	private JTextPane getJTextPane() {
128 		if (jTextPane == null) {
129 			jTextPane = new JTextPane();
130 		}
131 		return jTextPane;
132 	}
133 
134 	/***
135 	 * This method initializes jScrollPane2
136 	 * 
137 	 * @return javax.swing.JScrollPane
138 	 */
139 	private JScrollPane getJScrollPane2() {
140 		if (jScrollPane2 == null) {
141 			jScrollPane2 = new JScrollPane();
142 			jScrollPane2.setViewportView(getJTextPane1());
143 		}
144 		return jScrollPane2;
145 	}
146 
147 	/***
148 	 * This method initializes jPanel
149 	 * 
150 	 * @return javax.swing.JPanel
151 	 */
152 	private JPanel getJPanel() {
153 		if (jPanel == null) {
154 			jPanel = new JPanel();
155 			jPanel.add(getJButton(), null);
156 			jPanel.add(getJButton1(), null);
157 			jPanel.setVisible(true);
158 		}
159 		return jPanel;
160 	}
161 
162 	/***
163 	 * This method initializes jButton1
164 	 * 
165 	 * @return javax.swing.JButton
166 	 */
167 	private JButton getJButton1() {
168 		if (jButton1 == null) {
169 			jButton1 = new JButton();
170 			jButton1.setText("Export..");
171 			jButton1.addActionListener(new java.awt.event.ActionListener() {
172 				public void actionPerformed(java.awt.event.ActionEvent e) {
173 					export();
174 				}
175 			});
176 		}
177 		return jButton1;
178 	}
179 
180 	/***
181 	 * This method initializes jButton
182 	 * 
183 	 * @return javax.swing.JButton
184 	 */
185 	private JButton getJButton() {
186 		if (jButton == null) {
187 			jButton = new JButton();
188 			jButton.setText("Run");
189 
190 			jButton.addActionListener(new java.awt.event.ActionListener() {
191 				public void actionPerformed(java.awt.event.ActionEvent e) {
192 					execute(textoAEjecutar());
193 				}
194 			});
195 		}
196 		return jButton;
197 	}
198 
199 	/***
200 	 * Abre una ventana con icono de error
201 	 * 
202 	 * @param s
203 	 *            el string a mostrar
204 	 */
205 	public void notifyError(String s) {
206 		JOptionPane.showMessageDialog(this, s, "Blueberry Client Error",
207 				JOptionPane.ERROR_MESSAGE);
208 	}
209 
210 	/***
211 	 * Abre una ventana con icono de información
212 	 * 
213 	 * @param s
214 	 *            el string a mostrar
215 	 */
216 	public void notifyInformation(String s) {
217 		JOptionPane.showMessageDialog(this, s, "Blueberry Client Information",
218 				JOptionPane.INFORMATION_MESSAGE);
219 	}
220 
221 	/***
222 	 * Busca el string que se usará para la consulta
223 	 * 
224 	 * @return el texto para usar
225 	 */
226 	private String textoAEjecutar() {
227 		String ret = jTextPane.getSelectedText();
228 		if (ret == null)
229 			ret = jTextPane.getText();
230 		return ret;
231 	}
232 
233 	/***
234 	 * Ejecuta la consulta
235 	 * 
236 	 * @param s
237 	 *            el texto para usar
238 	 */
239 	private void execute(String s) {
240 		controller.emptyResults(jTextPane1);
241 		controller.emptyResults(jTextPane2);
242 		manager.execute(s);
243 		controller.showResults(currentResult, jTextPane1);
244 		controller.showResults(currentQueryPlan, jTextPane2);
245 	}
246 
247 	/***
248 	 * Exporta los resultados de la consulta a donde se indique.
249 	 *  
250 	 */
251 	private void export() {
252 
253 		manager.export();
254 	}
255 
256 	/***
257 	 * Devuelve el contenido actual de la tabla de resultados.
258 	 * 
259 	 * @return El contenido actual de la tabla de resultados.
260 	 */
261 	public String result() {
262 		return currentResult;
263 	}
264 
265 	/***
266 	 * This method initializes jTextPane1
267 	 * 
268 	 * @return javax.swing.JTextPane
269 	 */
270 	private JTextPane getJTextPane1() {
271 		if (jTextPane1 == null) {
272 			jTextPane1 = new JTextPane();
273 		}
274 		return jTextPane1;
275 	}
276 
277 	/***
278 	 * This method initializes jScrollPane1
279 	 * 
280 	 * @return javax.swing.JScrollPane
281 	 */
282 	private JScrollPane getJScrollPane1() {
283 		if (jScrollPane1 == null) {
284 			jScrollPane1 = new JScrollPane();
285 			jScrollPane1.setViewportView(getJTextPane2());
286 		}
287 		return jScrollPane1;
288 	}
289 
290 	/***
291 	 * This method initializes jTextPane2
292 	 * 
293 	 * @return javax.swing.JTextPane
294 	 */
295 	private JTextPane getJTextPane2() {
296 		if (jTextPane2 == null) {
297 			jTextPane2 = new JTextPane();
298 		}
299 		return jTextPane2;
300 	}
301 
302 	public void setResult(String tuples) {
303 		currentResult = tuples;
304 	}
305 
306 	public void setQueryPlan(String queryPlan) {
307 		currentQueryPlan = queryPlan;
308 	}
309 
310 }